/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package GUI;

import DAO.exceptions.NonexistentEntityException;
import DAO.exceptions.PreexistingEntityException;
import dominio.Usuario;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import negocio.LoginNegocio;

/**
 *
 * @author gilcemar e naliane
 */
public class ControladorLogin implements ActionListener {

    private JanelaSign janelaLogin;
    private JanelaCadastrarSenha janelaCadastroSenha;
    private JanelaPrincipal janelaPrincipal;

    public void setJanelaCadastroSenha(JanelaCadastrarSenha janelaCadastroSenha) {
        this.janelaCadastroSenha = janelaCadastroSenha;
    }

    public void setJanelaPrincipal(JanelaPrincipal janelaPrincipal) {
        this.janelaPrincipal = janelaPrincipal;
    }

    public void setJanelaLogin(JanelaSign janelaLogin) {
        this.janelaLogin = janelaLogin;
    }

    public void cadastrarSenha() throws PreexistingEntityException, Exception {
        janelaCadastroSenha.setVisible(true);
        LoginNegocio negocio = new LoginNegocio();
        Usuario usuario = new Usuario();
        usuario.setCpf(this.janelaCadastroSenha.getCampoCpf());
        usuario.setLogin(this.janelaCadastroSenha.getCampoLoginCadastro());
        usuario.setSenha(this.janelaCadastroSenha.getCampoSenhaCadastro());
        negocio.casdastrarLogin(usuario);
        limparCamposJanelaCadastroLogin(janelaCadastroSenha);
        JOptionPane.showMessageDialog(janelaCadastroSenha, "Login cadastrado com sucesso");
        janelaLogin.setVisible(true);
        janelaCadastroSenha.setVisible(false);
    }

    public void excluirLogin () throws NonexistentEntityException
    {
        LoginNegocio negocio = new LoginNegocio();
        negocio.excluirUsuario(janelaLogin.getCampoCpfUsuarioASerExcluido());
        janelaLogin.setCampoCpfUsuarioASerExcluido("");
        JOptionPane.showMessageDialog(janelaLogin, "Usuario excluído com sucesso");
    }

    public void alterarSenha(String login, String senha) throws NonexistentEntityException, Exception {
        LoginNegocio negocio = new LoginNegocio();
        Usuario usuarioASerAlterado = negocio.pesquisar(janelaLogin.getCampoCpfAlt());
        if (usuarioASerAlterado == null)
        {
            JOptionPane.showMessageDialog(janelaLogin, "Usuário inexistente");
        }else
            if (usuarioASerAlterado.getLogin().equalsIgnoreCase(login) && usuarioASerAlterado.getSenha().equalsIgnoreCase(senha))
            {
                usuarioASerAlterado.setSenha(janelaLogin.getCampoSenhaNova());
                negocio.alterarUsuario(usuarioASerAlterado);
                JOptionPane.showMessageDialog(janelaLogin, "Usuário alterado com sucesso");
            }else
            {
                JOptionPane.showMessageDialog(janelaLogin, "Não existe nenhum usuário com a senha informada");
            }
    }

    public void recuperarSenha ()
    {
        LoginNegocio negocio = new LoginNegocio();
        Usuario usuario = negocio.pesquisar(janelaLogin.getCampoCpfParaRecuperarSenha());
        if (usuario != null)
        {
            JOptionPane.showMessageDialog(janelaLogin, usuario.getSenha());
        }else
        {
            JOptionPane.showMessageDialog(janelaLogin, "Não existe nenhum usuário com este cpf");
        }
    }
    public void limparCamposJanelaLogin (JanelaSign janelaLogin)
    {
        janelaLogin.setCampoLogin("");
        janelaLogin.setCampoSenha("");
    }

    public void limparCamposJanelaCadastroLogin (JanelaCadastrarSenha janelaCadastrarSenha)
    {
        janelaCadastroSenha.setCampoCpf("");
        janelaCadastroSenha.setCampoLoginCadastro("");
        janelaCadastroSenha.setCampoSenhaCadastro("");
    }

    public void logar(String login, String senha) throws PreexistingEntityException, Exception {
        boolean logou = false;
        List<Usuario> usuarios = new LoginNegocio().logar();
        if (usuarios.isEmpty() && login.equalsIgnoreCase("admin") && senha.equalsIgnoreCase("admin")) {
            janelaLogin.setVisible(false);
            limparCamposJanelaLogin(janelaLogin);
            janelaCadastroSenha.setVisible(true);
        } else {
            for (Usuario usuario : usuarios) {
                if (usuario.getSenha().equalsIgnoreCase(senha) && usuario.getLogin().equalsIgnoreCase(login)) {
                    logou = true;
                }

            }
            if (logou) {
                JOptionPane.showMessageDialog(janelaLogin, "Bem vindo");
                janelaPrincipal.setVisible(true);
                janelaLogin.setVisible(false);
            } else {
                limparCamposJanelaLogin(janelaLogin);
                JOptionPane.showMessageDialog(janelaLogin, "Senha ou login incorretos", "Login", 3);
            }
        }

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equalsIgnoreCase("Cadastrar")) {
            try {
                cadastrarSenha();
            } catch (Exception ex) {
            }
        } else if (e.getActionCommand().equalsIgnoreCase("Entrar")) {
            try {
                logar(janelaLogin.getCampoLogin(), janelaLogin.getCampoSenha());
            } catch (PreexistingEntityException ex) {
                Logger.getLogger(ControladorLogin.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(ControladorLogin.class.getName()).log(Level.SEVERE, null, ex);
            }
        }else if (e.getActionCommand().equalsIgnoreCase("Alterar"))
        {
            try {
                alterarSenha(janelaLogin.getCampoLoginAlt(),janelaLogin.getCampoSenhaAntiga());
            } catch (NonexistentEntityException ex) {
                Logger.getLogger(ControladorLogin.class.getName()).log(Level.SEVERE, null, ex);
            } catch (Exception ex) {
                Logger.getLogger(ControladorLogin.class.getName()).log(Level.SEVERE, null, ex);
            }
        }else if (e.getActionCommand().equalsIgnoreCase("Excluir Login"))
        {
            try {
                excluirLogin();
            } catch (NonexistentEntityException ex) {
                JOptionPane.showMessageDialog(janelaLogin, ex.getMessage());
            }
        }else if (e.getActionCommand().equalsIgnoreCase("Recuperar Senha"))
        {
            recuperarSenha();
        }
    }
}
